//
//  Problem1328.swift
//  TestProject
//
//  Created by 武侠 on 2021/3/30.
//  Copyright © 2021 zhulong. All rights reserved.
//

import UIKit

/*
 1328. 破坏回文串
 给你一个回文字符串 palindrome ，请你将其中 一个 字符用任意小写英文字母替换，使得结果字符串的字典序最小，且 不是 回文串。

 请你返回结果字符串。如果无法做到，则返回一个空串。

 示例 1：
     输入：palindrome = "abccba"
     输出："aaccba"
 示例 2：
     输入：palindrome = "a"
     输出：""
 提示：
     1 <= palindrome.length <= 1000
     palindrome 只包含小写英文字母。
 */
@objcMembers class Problem1328: NSObject {
    func solution() {
        print(breakPalindrome("abccba"))
        print(breakPalindrome("aaa"))
        print(breakPalindrome("aba"))
    }
    /*
     字符串的字典序: "abc"和"abc"、 "abc"和"bbc"
     1: 先比较第一个字符‘a’和‘a’，如果相等，比较下一个，不想等，'a' < 'b' 那么 “abc” < "bbc"
     1: 遍历字符串(len/2)，寻找第一个不等于'a'的字符，将它变成'a'
     2: 不过不存在,全是‘a’，那么将最后一个字符变成‘b’
     */
    func breakPalindrome(_ palindrome: String) -> String {
        if palindrome.count <= 1 {
            return ""
        }
        
        var charts = Array(palindrome)
        var i = 0
        var isReplace = false
        while i < charts.count / 2 {
            if charts[i] != "a" {
                charts[i] = "a"
                isReplace = true
                break
            }
            i += 1
        }
        
        if isReplace == false {
            // aca
            if charts.count % 2 == 1 {
                if charts[i] == "a" {   // aaa
                    charts[charts.count - 1] = "b"
                } else {
                    charts[charts.count - 1] = "b"
                }
            } else {            //
                charts[charts.count - 1] = "b"
            }
        }
        return String(charts)
    }
}
